package ar.com.sectorwine.controllers;

import java.security.Principal;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import ar.com.sectorwine.dto.EmpresaDTO;
import ar.com.sectorwine.entities.Users;
import ar.com.sectorwine.services.HomeService;
import ar.com.sectorwine.services.UsuarioService;

/**
 * Handles requests for the application home page.
 */
@Controller
@Transactional(propagation = Propagation.REQUIRES_NEW)
public class HomeController {

	@Autowired
	private HomeService homeService;
	@Autowired
	private UsuarioService usuarioService;

	private static final Logger logger = LoggerFactory
			.getLogger(HomeController.class);

	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/home", method = RequestMethod.GET)
	public ModelAndView home(Locale locale, Model model, Principal principal) {
		logger.info("Welcome home! the client locale is " + locale.toString());

		Users usuarioActual = usuarioService.getUsuario(principal.getName());
		String formattedDate = homeService.getFormatterdDate(locale);
		model.addAttribute("serverTime", formattedDate);
		ModelAndView mav = new ModelAndView("home");
		try {
			if (!(usuarioActual.getPerfilUsuario().getEmpresas().isEmpty())) {
				mav.addObject("mis_empresas", usuarioActual.getPerfilUsuario()
						.getEmpresas());
				return mav;
			} else {
				mav.addObject("mensajeCabecera",
						"Aun no tienes una empresa asociada a tu perfil.");
				logger.info("El usuario " + usuarioActual.getUsername()
						+ " no tiene empresa creada.");
				return mav;
			}
		} catch (Exception e) {
			return mav;
		}
	}

	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String index(Locale locale, Model model) {
		logger.info("Welcome home! the client locale is " + locale.toString());

		String formattedDate = homeService.getFormatterdDate(locale);

		model.addAttribute("serverTime", formattedDate);

		return "index";
	}

}
